From: Marco Trevisan (TreviƱo) Date: Tue, 12 Apr 2022 15:28:57 +0000 (+0200) Subject: gdm/util: Use fully async call to setup the fingerprint device proxy X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~281^2~1^2~94 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=fa25156a6ce0765dfce5a4d5cfe25b3eaa2257f6;p=gnome-shell.git gdm/util: Use fully async call to setup the fingerprint device proxy Since fingerprint service can now be started also if a conversation has already began, we can also initialize the proxy asynchronously, without the risk that the service won't be started early enough. As per this, remove the usage of FprintDeviceProxy wrapper completely since it's just not giving us anything here. Part-of: --- diff --git a/js/gdm/util.js b/js/gdm/util.js index 7adeaebfa..83912b734 100644 --- a/js/gdm/util.js +++ b/js/gdm/util.js @@ -16,8 +16,8 @@ import * as SmartcardManager from '../misc/smartcardManager.js'; const FprintManagerInfo = Gio.DBusInterfaceInfo.new_for_xml( loadInterfaceXML('net.reactivated.Fprint.Manager')); -const FprintDeviceIface = loadInterfaceXML('net.reactivated.Fprint.Device'); -const FprintDeviceProxy = Gio.DBusProxy.makeProxyWrapper(FprintDeviceIface); +const FprintDeviceInfo = Gio.DBusInterfaceInfo.new_for_xml( + loadInterfaceXML('net.reactivated.Fprint.Device')); Gio._promisify(Gdm.Client.prototype, 'open_reauthentication_channel'); Gio._promisify(Gdm.Client.prototype, 'get_user_verifier'); @@ -361,9 +361,8 @@ export class ShellUserVerifier extends Signals.EventEmitter { const [devicePath] = fprintManager.GetDefaultDeviceSync(); this._fprintManager = fprintManager; - const fprintDeviceProxy = new FprintDeviceProxy(Gio.DBus.system, - 'net.reactivated.Fprint', devicePath, null, null, - Gio.DBusProxyFlags.NOT_CONNECT_SIGNALS); + const fprintDeviceProxy = this._getFingerprintDeviceProxy(devicePath); + fprintDeviceProxy.init(null); this._setFingerprintReaderType(fprintDeviceProxy['scan-type']); } else { // Ensure fingerprint service starts, but do not wait for it @@ -377,6 +376,17 @@ export class ShellUserVerifier extends Signals.EventEmitter { } } + _getFingerprintDeviceProxy(devicePath) { + return new Gio.DBusProxy({ + g_connection: Gio.DBus.system, + g_name: 'net.reactivated.Fprint', + g_object_path: devicePath, + g_interface_name: FprintDeviceInfo.name, + g_interface_info: FprintDeviceInfo, + g_flags: Gio.DBusProxyFlags.DO_NOT_CONNECT_SIGNALS, + }); + } + _handleFingerprintError(e) { this._fingerprintReaderType = FingerprintReaderType.NONE; @@ -409,9 +419,8 @@ export class ShellUserVerifier extends Signals.EventEmitter { // Wrappers don't support null cancellable, so let's ignore it in case const args = cancellable ? [cancellable] : []; const [devicePath] = await fprintManager.GetDefaultDeviceAsync(...args); - const fprintDeviceProxy = new FprintDeviceProxy(Gio.DBus.system, - 'net.reactivated.Fprint', devicePath, null, cancellable, - Gio.DBusProxyFlags.NOT_CONNECT_SIGNALS); + const fprintDeviceProxy = this._getFingerprintDeviceProxy(devicePath); + await fprintDeviceProxy.init_async(GLib.PRIORITY_DEFAULT, cancellable); this._setFingerprintReaderType(fprintDeviceProxy['scan-type']); this._updateDefaultService();